package com.example.springboot.context;

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * <b> 第一个启动扩展点 </b>
 * <p> 1.  这是整个spring容器在刷新之前初始化ConfigurableApplicationContext的回调接口，
 * 简单来说，就是在容器刷新之前调用此类的initialize方法。
 * 用户可以在整个spring容器还没被初始化之前做一些事情。
 * <p>
 * <p> 生效方式，因为这时候spring容器还没被初始化，需要额外处理：
 * <ol>
 *     <li> 在启动类中用 <code>application.addInitializers(new My1ApplicationContextInit())</code>  (参考本项目入口类) ,
 *     <li> 程序启动参数使用， --context.initializer.classes=com.example.context.My1ApplicationContextInit ,
 *     <li> Spring SPI扩展，在 spring.factories 中加入 org.springframework.context.ApplicationContextInitializer=com.example.context.My1ApplicationContextInit
 * </ol>
 *
 * <p>  常见用途: (此时还没有BeanDefinition,无法操作)
 * <ul>
 *     <li> 在容器刷新前动态设置 Environment（例如添加配置文件、环境变量）。
 *     <li> 注册一些自定义的 PropertySource 或 BeanFactoryPostProcessor。
 *     <li> 在多租户、多 profile 场景中动态修改配置。
 * </ul>
 * <p>
 *
 * @author Zhang.Z
 * @version 2025-09-21
 */
public class Test1ApplicationContextInit implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        System.out.println("test1 application context init...");
    }


}
